package Controlador;



import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;


import Modelo.Terminal;
import Modelo.Socio;
import Modelo.Empleado;
import Modelo.Ruta;
import Modelo.TipoUnidad;
import Vista.VCooperativa;
import Modelo.Cooperativa;

@SuppressWarnings("all")


public class CCooperativa implements ActionListener{

	private Terminal ter;
	private Socio so;
	private Empleado emp;
	private Ruta ru;
	private TipoUnidad tu;
	private VCooperativa vco;
	private Cooperativa cop;
	private int varBusqueda;
	private CTerminal controladorterminal;

	
	public CCooperativa(Terminal ter, CTerminal controladorterminal){
		super();
		this.ter = ter;
		this.so = so;
		this.emp = emp;
		this.ru = ru;
		this.tu = tu;
		this.cop = new Cooperativa();
		this.vco = new VCooperativa(this);
		this.vco.setVisible(true);
		this.controladorterminal = controladorterminal;
		
		llenarTabla();
		
		

	}
	
	//Metodos Para accionar los botones
	@Override
	public void actionPerformed(ActionEvent e) {
	      if(e.getActionCommand().toLowerCase().equals("modificar"))
	      {
	    	  		Modificar();
	      }
	      else if(e.getActionCommand().toLowerCase().equals("guardar"))
	      {
	    	  		Guardar();
	      }else if(e.getActionCommand().toLowerCase().equals("limpiar"))
	      {
	    	  Limpiar();
	      }else if(e.getActionCommand().toLowerCase().equals("eliminar"))
	      {
	    	  Eliminar();
	      }
	      else if(e.getActionCommand().toLowerCase().equals("buscar")){
	    	  Buscar();
	      }else if(e.getActionCommand().toLowerCase().equals("socio")){
	    	  RegistrarSocio();

	      }else if (e.getActionCommand().toLowerCase().equals("empleado")){
	    	  RegistrarEmpleado();
	      }else if (e.getActionCommand().toLowerCase().equals("unidad")){
	    	  RegistrarTipoUnidad();
	      }else if (e.getActionCommand().toLowerCase().equals("rutas")){
	    	  RegistrarRuta();
	      }
	      
	}
	
	public void RegistrarRuta() {
		String codigo = vco.getTxtCodigo().getText().toString();
		if(ter.buscarCooperativa(codigo)==null)
		{
			vco.mostrarMensaje("No puede registrar una ruta a una cooperativa que no existe");
		}else{
			//co.setCodigo(vco.getTxtCodigo().getText().toString());
			//co.setDescripcion(vco.getTxtDescripcion().getText().toString());
			
			Cooperativa co = ter.buscarCooperativa(vco.getTxtCodigo().getText());
			CRuta ventanaruta = new CRuta(co, ter, this);
			
			if(co.contarRutas() == 0){
				try {
					FileReader lectorarchivo = new FileReader("archivos/Rutas.txt");
					BufferedReader bufferedReader = new BufferedReader(lectorarchivo);
					
					
					String linea = bufferedReader.readLine();
					while (linea != null) {
						
						String codigoruta = linea;
						String descripcion = bufferedReader.readLine();
						String ciudad  = bufferedReader.readLine();
						String estado = bufferedReader.readLine();
						float distancia = Float.parseFloat(bufferedReader.readLine());
						float tiempo = Float.parseFloat(bufferedReader.readLine());
						String cooperativa=bufferedReader.readLine();
						
						
					//ventanaruta.GuardarArchivoRuta(codigoruta, descripcion, ciudad, estado, distancia, tiempo, cooperativa);
					
						Ruta ru = new Ruta();
						
						ru.setCiudad(ciudad);
						ru.setCodigo(codigoruta);
						ru.setCooperativa(cooperativa);
						ru.setDescripcion(descripcion);
						ru.setDistancia(distancia);
						ru.setEstado(estado);
						ru.setTiempo(tiempo);
						
						co.agregarRuta(ru);
						
						
						linea = bufferedReader.readLine();
						
					}
				} catch (Exception ex) {

				}
				

			}
			
			ventanaruta.llenarTabla();
			
			

		}
		
	
		
	}

	public void RegistrarTipoUnidad() {
		
		String codigo = vco.getTxtCodigo().getText().toString();
		if(ter.buscarCooperativa(codigo)==null)
		{
			vco.mostrarMensaje("No puede registrar un empleado a una cooperativa que no existe");
		}else{
			//co.setCodigo(vco.getTxtCodigo().getText().toString());
			//co.setDescripcion(vco.getTxtDescripcion().getText().toString());
			Cooperativa co = ter.buscarCooperativa(vco.getTxtCodigo().getText());
			CTipoUnidad ventanaunidad = new CTipoUnidad(co, ter, this);
			
			if(co.contarTiposUnidad() == 0){
				try {
					FileReader lectorarchivo = new FileReader("archivos/TipoUnidades.txt");
					BufferedReader bufferedReader = new BufferedReader(lectorarchivo);
					
					String linea = bufferedReader.readLine();
					while (linea != null) {
						
						String descripcion = bufferedReader.readLine();
						String cooperativa = bufferedReader.readLine();
					
						//ventanaunidad.AgregarArchivoTipoUnidad(codigotp, descripcion, cooperativa);
						
						
						TipoUnidad tu = new TipoUnidad();
						tu.setCodigo(linea);
						tu.setDescripcion(descripcion);
						tu.setCooperativa(cooperativa);
						
						co.agregarTipoUnidad(tu);
						
						linea = bufferedReader.readLine();

					}
				} catch (Exception ex) {

				}
				
				ventanaunidad.llenarTabla();
				
			}
			

			
			
			
			
		}
	}

	public void RegistrarEmpleado() {
		
		Cooperativa co = ter.buscarCooperativa(vco.getTxtCodigo().getText());
		
		String codigo = vco.getTxtCodigo().getText().toString();
		if(ter.buscarCooperativa(codigo)==null)
		{
			vco.mostrarMensaje("No puede registrar un empleado a una cooperativa que no existe");
		}else{
			//co.setCodigo(vco.getTxtCodigo().getText().toString());
			//co.setDescripcion(vco.getTxtDescripcion().getText().toString());
			
			
			CEmpleado ventanaempleado = new CEmpleado(co, ter, this);
			
			if(co.contarEmpleados() == 0){
				try {
					FileReader lectorarchivo = new FileReader("archivos/Empleado.txt");
					BufferedReader bufferedReader = new BufferedReader(lectorarchivo);
					
					String linea = bufferedReader.readLine();
					while (linea != null) {
						
						String nombre = linea;
						String telefono = bufferedReader.readLine();
						String cedula = bufferedReader.readLine();
						String cooperativa = bufferedReader.readLine();
						String tipo = bufferedReader.readLine();
					
						//ventanaempleado.GuardarArchivoEmpleado(nombre, telefono, cedula, cooperativa, tipo);
						
						
						Empleado emp = new Empleado();
						emp.setNombre(nombre);
						emp.setTelefono(telefono);
						emp.setCedula(cedula);
						emp.setCooperativaPertenece(cooperativa);
						emp.setTipo(tipo);
						
						
						co.agregarEmpleado(emp);
						
						linea = bufferedReader.readLine();

					}
				} catch (Exception ex) {

				}
			}
			
			ventanaempleado.llenarTabla();
			

			
		}
		
		
	}

	public void RegistrarSocio(){
		
		Cooperativa co = ter.buscarCooperativa(vco.getTxtCodigo().getText());
		
			if(co.contarTiposUnidad() == 0){
				vco.mostrarMensaje("No hay tipos de unidades registradas");
			}else
			{
			
			String codigo = vco.getTxtCodigo().getText().toString();
			if(ter.buscarCooperativa(codigo)==null)
			{
				vco.mostrarMensaje("No puede registrar un empleado a una cooperativa que no existe");
			}else{
				//co.setCodigo(vco.getTxtCodigo().getText().toString());
				//co.setDescripcion(vco.getTxtDescripcion().getText().toString());
				
			
				
				CSocio ventanasocio = new CSocio(co, ter, this);
				
				if(co.contarSocios() == 0){
				
					
					try {
						FileReader lectorarchivo = new FileReader("archivos/Socios.txt");
						BufferedReader bufferedReader = new BufferedReader(lectorarchivo);
						
						String linea = bufferedReader.readLine();
						while (linea != null) {
							
							
							
							String nombre = bufferedReader.readLine();
							String telefono = bufferedReader.readLine();
							String cedula = bufferedReader.readLine();
							
							Socio s = new Socio();
							
							s.setNombre(nombre);
							s.setCedula(cedula);
							s.setTelefono(telefono);
							s.setCooperativaPertenece(linea);
							co.agregarSocio(s);
							
							//ventanasocio.GuardarArchivo(cedula,nombre ,telefono ,linea);
							
							linea = bufferedReader.readLine();

						}
					} catch (Exception ex) {

					}
					
					ventanasocio.llenarTabla();
				}
				

				
				
				
				
				
				
				
			}
			
			}
		
	}
	
	
	public void Modificar(){
		
	}
	
	public void Guardar(){
		
		if(validarDatos()){
			
			Cooperativa co = new Cooperativa();
			co.setCodigo(vco.getTxtCodigo().getText().toString());
			co.setDescripcion(vco.getTxtDescripcion().getText().toString());
			co.setTelefono(vco.getTxttelefono().getText().toString());
			ter.agregarCooperativa(co);
			JOptionPane.showMessageDialog(null, "Registro Cooperativa Exitoso", "Registrar Cooperativa", 1);
			vco.getTxtCodigo().setText("");
			vco.getTxtDescripcion().setText("");
			vco.getTxttelefono().setText("");

			vco.limpiarTabla();
			llenarTabla();
		}
	}
	
	public void Limpiar(){

		//pone los campos de texto en blanco
		vco.getTxtCodigo().setText("");
		vco.getTxtDescripcion().setText("");
		vco.getTxttelefono().setText("");

		
		//habilita todos los botones
		vco.getBtnBuscar().setEnabled(true);
		vco.getBtnEliminar().setEnabled(true);
		vco.getBtnModificar().setEnabled(true);
		vco.getBtnGuardar().setEnabled(true);
		
		//habilita todos los campos de texto
		
		vco.getTxtCodigo().setEnabled(true);
		vco.getTxtDescripcion().setEnabled(true);
		vco.getTxttelefono().setEnabled(true);

		varBusqueda = 0;

	}
	
	public void Eliminar(){
		
	}
	
	public void Buscar(){
		

		if((vco.getTxtCodigo().getText().equals(""))){
			vco.mostrarMensaje("Debe llenar el campo codigo para poder buscar");		
		}else if(vco.getTxtCodigo().getText().toString() != "")
		{
			String codigo = vco.getTxtCodigo().getText().toString();
			if(ter.buscarCooperativa(codigo) == null){
				vco.mostrarMensajeError("La Cooperativa con codigo " + codigo + " no existe");
			}else{
			
			
					Cooperativa cooperativabuscada = ter.buscarCooperativa(codigo);
							
					if(cooperativabuscada.getCodigo().toString().equals(codigo)) {
						
						vco.getTxtCodigo().setEnabled(false);
						vco.getTxtDescripcion().setEnabled(false);
						vco.getTxttelefono().setEnabled(false);


						vco.getTxtDescripcion().setText(cooperativabuscada.getDescripcion().toString());
						vco.getTxttelefono().setText(cooperativabuscada.getTelefono().toString());

						
						vco.getBtnGuardar().setEnabled(false);
						vco.getBtnBuscar().setEnabled(false);
						varBusqueda = 1;
					}
			
			}

		}
		
	}
	
	// Metodo para validar los datos
	
	public boolean validarDatos(){
		if(vco.getTxtCodigo().getText().toString().equalsIgnoreCase("")){
			vco.mostrarMensaje("Debe ingresar un codigo de la Cooperativa");
			return false;
		}else if (vco.getTxtDescripcion().getText().toString().equalsIgnoreCase("")){
			vco.mostrarMensaje("Debe ingresar una descripcion de la Cooperativa");
			return false;
		}else if (vco.getTxttelefono().getText().toString().equalsIgnoreCase("")){
			vco.mostrarMensaje("Debe ingresar un telefono de la Cooperativa");
			return false;
		}else if (ter.buscarCooperativa(vco.getTxtCodigo().getText().toString()) != null){
			vco.mostrarMensaje("Ya la cooperativa con el codigo " + vco.getTxtCodigo().getText().toString() + " existe");
			Limpiar();
			return false;
		}
		
		return true; //en caso de que esten llenos los campos
		
	}
	
	 /** Metodo que permite llenar la Tabla de cooperativas con la informacion de las cooperativas que tiene el terminal
	 */
	
	public void llenarTabla() {
		
		vco.limpiarTabla();
		for (int k = 0; k < ter.contarCooperativas(); k++) {
			Vector<String> datos = new Vector<String>(2, 1);
			String codigoCooperativa = ter.obtenerCooperativa(k).getCodigo();
			String nombreCooperativa = ter.obtenerCooperativa(k).getDescripcion();
			datos.add(codigoCooperativa);
			datos.add(nombreCooperativa);
			vco.agregarFilaTblCooperativa(datos);
		}
	}
	

}
